/**
 * TextCategoricationModel.java created by 漫时光。 at 上午11:54:33 2017年7月21日
 */
package cn.edu.bjtu.workbench.api;

import java.io.File;
import java.util.concurrent.Future;

import cn.edu.bjtu.workbench.core.TextCategorizationManager.ClassificationPair;

/**
 * 模型接口。
 * 任何一个提供文本分类功能的模型都应该实现这一个接口。
 * model子工程里面模型只能使用，不能更新
 * @author 漫时光。<br>
 */
public interface TextCategoricationModel {
	/**
	 * buildModel是一个长时间操作，所以提供同步和异步的方法
	 * 这个是同步方法
	 */
	void buildModelSync() throws Exception;
	/**
	 * buildModel是一个长时间操作，所以提供同步和异步的方法
	 * 这个是异步方法，返回一个 Future
	 */
	Future<Boolean> buildModelAsync() throws Exception;
	/**
	 * 预测文档
	 * @param doc 待预测的文档
	 * @return
	 * @throws Exception
	 */
	ClassificationPair[] predictDocument(String doc) throws Exception;
	/**
	 * 预测多个文档
	 * @param doc 待预测的文档
	 * @return
	 * @throws Exception
	 */
	ClassificationPair[][] predictDocument(String doc[]) throws Exception;
	/**
	 * 添加文档用来更新模型
	 * @param sentence 用来更新文档内容
	 * @param label  用来更新的文档的类标
	 * @return
	 * @throws Exception
	 */
	boolean addDocumentForUpdate(String sentence,String label) throws Exception;
	/**
	 * 从文件恢复
	 * @throws Exception
	 */
	void restoreFromFile() throws Exception;
	/**
	 * 保存模型到文件
	 * @throws Exception
	 */
	void saveModel2File() throws Exception;
	/**
	 * 保存模型到指定文件
	 * @param f
	 * @throws Exception
	 */
	void saveModel2File(File f) throws Exception;
	/**
	 * 获取配置参数
	 * @return
	 */
	Config getConfig();
}
